home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 4_2005-2006.ISO / data / Zips / PSC_FileSt1924438162005.psc / PSC FileStore / cToolTip.cls next >
Text File  |  2005-08-09  |  14KB  |  319 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cToolTip"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. 'Code done by Ulli
  17. 'Custom Tooltip Class
  18. '''''''''''''''''''''
  19. 'This class was inspired by code by Eidos (found at PSC some time ago) and others.
  20. '
  21. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  22. 'Jan02 2003   UMG
  23. '
  24. 'Three new options have been added - display tooltip always / only if parent form is active / None
  25. 'see TTStyle.
  26. '
  27. 'Added missing Style private property variable.
  28. 'Rearranged code a little.
  29. '
  30. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  31. Private tthWnd                             As Long           'Tooltip window handle
  32. Private Const ToolTipWindowClassName       As String = "Tooltips_Class32"
  33. Private Const CW_USEDEFAULT                As Long = &H80000000
  34. Private Const TTS_STANDARD                 As Long = 0
  35. Private Const TTS_BALLOON                  As Long = &H40
  36. Private Const TTS_ALWAYSTIP                As Long = 1       'display even if parent window is inactive
  37. Private Const TTS_NOPREFIX                 As Long = 2       'does not remove "&" from text
  38. Private Const TTDT_AUTOPOP                 As Long = 2
  39. Private Const TTDT_INITIAL                 As Long = 3
  40. Public Enum TTStyle
  41.     TTStandardIfActive = TTS_STANDARD                   'suppress if parent form is not active
  42.     TTBalloonIfActive = TTS_BALLOON                     'suppress if parent form is not active
  43.     TTStandardAlways = TTS_STANDARD Or TTS_ALWAYSTIP    'display even if parent form is not active
  44.     TTBalloonAlways = TTS_BALLOON Or TTS_ALWAYSTIP      'display even if parent form is not active
  45.     TTNone = -1                                         'kill tooltip (this is simply treated as illegal)
  46. End Enum
  47. #If False Then 'Trick preserves Case of Enums when typing in IDE
  48. Private TTStandardIfActive, TTBalloonIfActive, TTStandardAlways, TTBalloonAlways, TTNone
  49. #End If
  50. ''''''''<:-) :SUGGESTION: Inserted by Code Fixer. (Must be placed after Enum Declaration for Code Fixer to recognize it properly)
  51. #If False Then
  52. Private TTStandardIfActive, TTBalloonIfActive, TTStandardAlways, TTBalloonAlways, TTNone 'to preserve the case
  53. #End If
  54. Public Enum TTIcon
  55.     TTIconNone = 0
  56.     TTIconInfo = 1         'i in white balloon
  57.     TTIconWarning = 2      '! in yellow triangle
  58.     TTIconError = 3        'x in red circle
  59.     'all have a light gray shadow so be careful when selecting the ToolTip BackColor
  60. End Enum
  61. #If False Then 'Trick preserves Case of Enums when typing in IDE
  62. Private TTIconNone, TTIconInfo, TTIconWarning, TTIconError
  63. #End If
  64. ''''''''''''<:-) :SUGGESTION: Inserted by Code Fixer. (Must be placed after Enum Declaration for Code Fixer to recognize it properly)
  65. #If False Then
  66. Private TTIconNone, TTIconInfo, TTIconWarning, TTIconError 'to preserve the case
  67. #End If
  68. 'my properties
  69. Private myStyle                            As TTStyle
  70. Private myIcon                             As TTIcon
  71. Private myForeColor                        As Long
  72. Private myBackColor                        As Long
  73. Private myTitle                            As String         'has the current title
  74. Private myHoverTime                        As Long           'time im millisecs (-1 = use default)
  75. Private myPopupTime                        As Long           'time im millisecs (-1 = use default)
  76. Private myInitialText                      As Variant        'has the initial text
  77. Private myInitialTitle                     As Variant        'has the initial title
  78. Private Const SWP_NOSIZE                   As Long = &H1
  79. Private Const SWP_NOMOVE                   As Long = &H2
  80. Private Const SWP_NOACTIVATE               As Long = &H10
  81. Private Const SWP_FLAGS                    As Long = SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE
  82. Private Const TOPMOST                      As Long = -1
  83. Private Const WM_USER                      As Long = &H400
  84. Private Const TTM_SETDELAYTIME             As Long = WM_USER + 3
  85. Private Const TTM_ADDTOOL                  As Long = WM_USER + 4
  86. Private Const TTM_SETTIPBKCOLOR            As Long = WM_USER + 19
  87. Private Const TTM_SETTIPTEXTCOLOR          As Long = WM_USER + 20
  88. Private Const TTM_SETTITLE                 As Long = WM_USER + 32
  89. Private Type RECTANGLE
  90.     Left                                     As Long
  91.     Top                                      As Long
  92.     Right                                    As Long
  93.     Bottom                                   As Long
  94. End Type
  95. Private Type ToolInfo
  96.     ttSize                                   As Long
  97.     myFlags                                  As Long
  98.     ttParhWnd                                As Long
  99.     ttId                                     As Long
  100.     ParentRect                               As RECTANGLE
  101.     hInstance                                As Long
  102.     myText                                   As String
  103.     lParam                                   As Long
  104. End Type
  105. Private ToolInfo                           As ToolInfo
  106. 'tool property flag bits                             meaning
  107. Private Const TTF_CENTERTIP                As Long = 2       'center tool on parent
  108. Private Const TTF_SUBCLASS                 As Long = &H10    'use implicit subclassinf
  109. Private Declare Sub InitCommonControls Lib "comctl32" ()
  110. Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, _
  111.                                                                               ByVal lpClassName As String, _
  112.                                                                               ByVal lpWindowName As String, _
  113.                                                                               ByVal dwStyle As Long, _
  114.                                                                               ByVal X As Long, _
  115.                                                                               ByVal Y As Long, _
  116.                                                                               ByVal nWidth As Long, _
  117.                                                                               ByVal nHeight As Long, _
  118.                                                                               ByVal hWndParent As Long, _
  119.                                                                               ByVal hMenu As Long, _
  120.                                                                               ByVal hInstance As Long, _
  121.                                                                               lpParam As Any) As Long
  122. Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
  123. Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _
  124.                                                     ByVal hWndInsertAfter As Long, _
  125.                                                     ByVal X As Long, _
  126.                                                     ByVal Y As Long, _
  127.                                                     ByVal cx As Long, _
  128.                                                     ByVal cy As Long, _
  129.                                                     ByVal wFlags As Long) As Long
  130. Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
  131. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
  132.                                                                         ByVal wMsg As Long, _
  133.                                                                         ByVal wParam As Long, _
  134.                                                                         lParam As Any) As Long
  135. Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, _
  136.                                                      lpRect As RECTANGLE) As Long
  137.  
  138. Public Property Get BackCol() As Long
  139.  
  140.   'this returns the current tooltip backcolor
  141.  
  142.     BackCol = myBackColor
  143.  
  144. End Property
  145.  
  146. Public Property Get Centered() As Boolean
  147.  
  148.   'this returns the current tooltip alignment
  149.  
  150.     Centered = CBool(ToolInfo.myFlags And TTF_CENTERTIP)
  151.  
  152. End Property
  153.  
  154. Private Sub Class_Initialize()
  155.  
  156.     InitCommonControls 'doesn't matter that this is called for every class instance
  157.     myStyle = TTNone
  158.  
  159. End Sub
  160.  
  161. Private Sub Class_Terminate()
  162.  
  163.   'kill tooltip window if one exists
  164.  
  165.     If tthWnd Then
  166.         DestroyWindow tthWnd
  167.         tthWnd = 0
  168.     End If
  169.     myStyle = TTNone
  170.  
  171. End Sub
  172.  
  173. Public Function Create(cntParent As Control, _
  174.                        ByVal strText As String, _
  175.                        Optional ByVal ttsStyle As TTStyle = TTBalloonAlways, _
  176.                        Optional ByVal Centered As Boolean = False, _
  177.                        Optional ByVal ttiIcon As TTIcon = TTIconNone, _
  178.                        Optional ByVal Title As String = vbNullString, _
  179.                        Optional ByVal lngForeColor As Long = vbButtonText, _
  180.                        Optional ByVal lngBackColor As Long = vbInfoBackground, _
  181.                        Optional ByVal HoverTime As Long = -1, _
  182.                        Optional ByVal PopupTime As Long = 99000) As Long
  183.  
  184.     PopupTime = 8000
  185.     lngForeColor = 0
  186.     lngBackColor = -2147483624
  187.     'Create the tooltip window for parent control
  188.     'This cannot create custom tooltips for hWnd-less controls
  189.     Class_Terminate 'kill tooltip window if one exists
  190.     With ToolInfo
  191.         On Error Resume Next
  192.             .ttParhWnd = cntParent.hwnd
  193.             If Err.Number = 0 And (ttsStyle = TTBalloonAlways Or ttsStyle = TTStandardAlways Or ttsStyle = TTBalloonIfActive Or ttsStyle = TTStandardIfActive) And (ttiIcon = TTIconError Or ttiIcon = TTIconInfo Or ttiIcon = TTIconNone Or ttiIcon = TTIconWarning) Then
  194.                 'the tooltip parent control has an hWnd and the params are acceptable
  195.                 .ttSize = Len(ToolInfo)
  196.                 .myFlags = TTF_SUBCLASS Or IIf(Centered, TTF_CENTERTIP, 0&)
  197.                 GetClientRect .ttParhWnd, .ParentRect
  198.                 .hInstance = App.hInstance
  199.                 myTitle = Title
  200.                 If myInitialTitle = Empty Then
  201.                     myInitialTitle = myTitle
  202.                 End If
  203.                 .myText = Replace$(strText, "|", vbNewLine)       'the vertical bar is used as line break character
  204.                 If Len(myTitle) = 0 Then
  205.                     .myText = Replace$(.myText, vbNewLine, " ")
  206.                 End If
  207.                 If myInitialText = Empty Then
  208.                     myInitialText = .myText
  209.                 End If
  210.                 If lngForeColor < 0 Then
  211.                     lngForeColor = GetSysColor(lngForeColor And &H7FFFFFFF) 'GetSysColor(ForeColor And &H7FFFFFFF)
  212.                 End If
  213.                 If lngBackColor < 0 Then
  214.                     lngBackColor = GetSysColor(lngBackColor And &H7FFFFFFF)
  215.                 End If
  216.                 If lngForeColor = lngBackColor Then
  217.                     lngForeColor = vbButtonText
  218.                     lngBackColor = vbInfoBackground
  219.                 End If
  220.                 myForeColor = lngForeColor
  221.                 myBackColor = lngBackColor
  222.                 myStyle = ttsStyle
  223.                 myIcon = ttiIcon
  224.                 myHoverTime = HoverTime
  225.                 myPopupTime = PopupTime
  226.                 myTitle = "Tool Tip "
  227.                 'create tooltip window and set it's properties
  228.                 tthWnd = CreateWindowEx(0&, ToolTipWindowClassName, vbNullString, TTS_NOPREFIX Or ttsStyle, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, .ttParhWnd, 0&, .hInstance, 0&)
  229.                 SetWindowPos tthWnd, TOPMOST, 0&, 0&, 0&, 0&, SWP_FLAGS
  230.                 SendMessage tthWnd, TTM_ADDTOOL, 0&, ToolInfo
  231.                 SendMessage tthWnd, TTM_SETTITLE, ttiIcon, ByVal myTitle
  232.                 SendMessage tthWnd, TTM_SETTIPTEXTCOLOR, myForeColor, ByVal 0&
  233.                 SendMessage tthWnd, TTM_SETTIPBKCOLOR, myBackColor, ByVal 0&
  234.                 SendMessage tthWnd, TTM_SETDELAYTIME, TTDT_INITIAL, ByVal myHoverTime
  235.                 SendMessage tthWnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, ByVal myPopupTime
  236.                 Create = tthWnd
  237.             End If
  238.         On Error GoTo 0
  239.     End With 'ToolInfo
  240.  
  241. End Function
  242.  
  243. Public Property Get ForeCol() As Long
  244.  
  245.   'this returns the current tooltip forecolor
  246.  
  247.     ForeCol = myForeColor
  248.  
  249. End Property
  250.  
  251. Public Property Get HoverTime() As Long
  252.  
  253.   'this returns the current mouse HoverTime time in millicecs (-1 for default)
  254.  
  255.     HoverTime = myHoverTime
  256.  
  257. End Property
  258.  
  259. Public Property Get Icon() As TTIcon
  260.  
  261.   'this returns the current tooltip icon
  262.  
  263.     Icon = myIcon
  264.  
  265. End Property
  266.  
  267. Public Property Get InitialText() As String
  268.  
  269.   'this returns the inital tooltip text, ie the one that was supplied on creation
  270.  
  271.     InitialText = myInitialText
  272.  
  273. End Property
  274.  
  275. Public Property Get InitialTitle() As String
  276.  
  277.   'this returns the inital tooltip title, ie the one that was supplied on creation
  278.  
  279.     InitialTitle = myInitialTitle
  280.  
  281. End Property
  282.  
  283. Public Property Get PopupTime() As Long
  284.  
  285.   'this returns the current max PopupTime time in millisecs (-1 for default)
  286.  
  287.     PopupTime = myPopupTime
  288.  
  289. End Property
  290.  
  291. Public Property Get Style() As TTStyle
  292.  
  293.   'this returns the current tooltip style
  294.  
  295.     Style = myStyle
  296.  
  297. End Property
  298.  
  299. Public Property Get Text() As String
  300.  
  301.   'this returns the current tooltip text
  302.  
  303.     Text = ToolInfo.myText
  304.  
  305. End Property
  306.  
  307. Public Property Get Title() As String
  308.  
  309.   'this returns the current tooltip Title
  310.  
  311.     Title = myTitle
  312.  
  313. End Property
  314.  
  315. ':)Code Fixer V3.0.9 (04/08/2005 18:02:30) 101 + 174 = 275 Lines Thanks Ulli for inspiration and lots of code.
  316.  
  317. ':) Ulli's VB Code Formatter V2.17.9 (2005-Aug-09 21:50)  Decl: 123  Code: 182  Total: 305 Lines
  318. ':) CommentOnly: 37 (12.1%)  Commented: 27 (8.9%)  Empty: 56 (18.4%)  Max Logic Depth: 4
  319.